#include "Cliente.h"
#include <string.h>


    /**********************************************************************
        Classe: Cliente
        Funcionalidade: Guarda informações básicas sobre o cliente
    ***********************************************************************/


/* Construtor da classe Cliente */
Cliente::Cliente(string n, string c) {
	nome = n;
	cpf = c;
}

/* Metodo getPaciente
 * Retorna os pacientes relacionados com o cliente
 */
list<Paciente> &Cliente::getPacientes() {
	return pacientes;
}

/* Metodo getPacotes
 * Retorna os pacotes relacionados com o cliente
 */
list<Pacote> &Cliente::getPacotes() {
	return pacotes;
}

/* Destrutor da classe Cliente */
Cliente::~Cliente() {
	pacientes.clear();
	pacotes.clear();
}

/* Metodo adicionarPacote
 * Adiciona um pacote para se relacionar com o cliente.
 * Recebe o pacote para ser adicionado.
 */
void Cliente::adicionarPacote(Pacote pacote) {
	pacotes.push_back(pacote);
}

/* Metodo setNome
 * Adiciona um nome ao cliente
 */
void Cliente::setNome(string n) {
	nome = n;
}

/* Metodo setCpf
 * Adiciona um CPF ao cliente
 */
void Cliente::setCpf(string c) {
	cpf = c;
}

/* Metodo novoPaciente
 * Adiciona um paciente a ser relacionado com o cliente.
 * Recebe o nome do novo paciente, bem como sua data de nascimento (dia, mes e ano).
 */
void Cliente::novoPaciente(string n, int d, int m, int a) {
	pacientes.push_back(Paciente(this, n, d, m, a));
}

/* Metodo removerPaciente
 * Remove um paciente já relacionado ao cliente.
 * Recebe o nome do paciente a ser removido.
 */
bool Cliente::removerPaciente(string n) {
	list<Paciente>::iterator it;
	for (it = pacientes.begin(); it != pacientes.end(); it++) {
		if (n == it->getNome()) {
			pacientes.erase(it);
			return true;
		}
	}
	return false;
}

/* Metodo getNome
 * Retorna o nome do cliente
 */
string Cliente::getNome() {
	return nome;
}

/* Metodo getCpf
 * Retorna o CPF do cliente
 */
string Cliente::getCpf() {
	return cpf;
}
